// 函数签名

// interface IFnCall {
//   (name: string, age: number): string
// }
//
// const foo: IFnCall = (name, age) => {
//   return `${name}、${age}`
// }
//
// foo('张三', 17)

// 函数调用签名
interface IFnCall {
  <T>(fn: () => T, age: number): T
}
// 定义函数对象
const foo: IFnCall = (fn, age) => {
  return fn()
}

// 调用函数
// 不传入明确的类型，可以进行类型推断
foo<string>(() => '张三', 17)
foo(() => '张三', 17)
